package leetcode.code;

/**
 * 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”：
 *
 * B.length >= 3
 * 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]
 * （注意：B 可以是 A 的任意子数组，包括整个数组 A。）
 *
 * 给出一个整数数组 A，返回最长 “山脉” 的长度。
 *
 * 如果不含有 “山脉” 则返回 0。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：[2,1,4,7,3,2,5]
 * 输出：5
 * 解释：最长的 “山脉” 是 [1,4,7,3,2]，长度为 5。
 * 示例 2：
 *
 * 输入：[2,2,2]
 * 输出：0
 * 解释：不含 “山脉”。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/longest-mountain-in-array
 */
public class 数组中最长的山脉 {

    public static int longestMountain(int[] A) {
        boolean upFlag = true;
        int max = 0;
        int tmpLength = 0;
        for (int i = 0; i < A.length; i++){
            if (tmpLength>=3 && tmpLength>max && !upFlag) max = tmpLength;
            if (i == 0){
                tmpLength++;
                continue;
            }
            if (upFlag){
                if (A[i]<=A[i-1] && tmpLength==1){
                    tmpLength = 1;
                }else if (A[i] > A[i-1]){
                    tmpLength++;
                }else if (A[i] < A[i-1]){
                    tmpLength++;
                    upFlag = false;
                }else {
                    tmpLength = 1;
                }
            }else {
                if (A[i] > A[i-1]){
                    tmpLength = 2;
                    upFlag = true;
                }else if (A[i] == A[i-1]){
                    tmpLength = 1;
                    upFlag = true;
                } else{
                    tmpLength++;
                }
            }
        }
        if (tmpLength>=3 && tmpLength>max && !upFlag) max = tmpLength;
        return max;
    }

    public static void main(String args[]){
        int[] a = new int[]{0,1,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,0,1,1};
        System.out.println(longestMountain(a));
    }
}
